package migration

import (
	_ "github.com/jinzhu/gorm"
)

type Model struct {
	CreateTime string
	UpdateTime string
}

// backend后台管理员
type AdminTable struct {
	Id       int
	Username string // 用户名
	Password string // 密码
	Email    string // 邮箱
	Mobile   string // 手机号
	Avatar   string // 头像
	Status   int    // 状态:0禁用,1启用
	Model
}

func (AdminTable) TableName() string {
	return "admin"
}

// backend后台role
type RoleTable struct {
	Id      int
	Name    string  // 角色名
	Sort    int     // 排序值
	Desc    *string // 备注
	Status  int     // 状态:0禁用,1启用
	Creator int     // 创建者
	Model
}

func (RoleTable) TableName() string {
	return "role"
}

// backend后台admin_role
type AdminRoleTable struct {
	Id      int
	AdminId int
	RoleId  int
	Model
}

func (AdminRoleTable) TableName() string {
	return "admin_role"
}

// backend后台menu
type MenuTable struct {
	Id         int
	Name       string  //菜单名字
	Sort       int     //排序规则
	Icon       *string //菜单图标
	Router     *string //访问路由
	ParentId   *string //父级id
	ParentPath *string //父级路径
	ShowStatus int     //显示状态1:显示 2:隐藏
	Status     int     //状态1:启用 2:禁用
	Desc       *string //备注
	Model
}

func (MenuTable) TableName() string {
	return "menu"
}

// backend后台role_menu
type RoleMenuTable struct {
	Id       int
	RoleId   int
	MenuId   int
	ActionId int
	Model
}

func (RoleMenuTable) TableName() string {
	return "role_menu"
}

// backend后台menu_action_resource
type MenuActionResourceTable struct {
	Id       int
	ActionId string // 菜单动作id
	Method   string // 资源请求方式(支持正则)
	Path     string // 资源请求路径(支持/:id匹配)
	Model
}

func (MenuActionResourceTable) TableName() string {
	return "menu_action_resource"
}

// backend后台menu_action
type MenuActionTable struct {
	Id     int
	MenuId string // 菜单id
	Code   string // 动作编号
	Name   string // 动作名称
	Model
}

func (MenuActionTable) TableName() string {
	return "menu_action"
}

// 小程序端用户
type UserTable struct {
	Id       int
	Openid   string // 微信openid
	Nickname string // 昵称
	Avatar   string // 头像
	Mobile   string // 手机号
	City     string // 城市编码
	Province string // 省份
	Country  string // 国家
	Gender   int    // 性别 0：未知、1：男、2：女
	Model
}

func (UserTable) TableName() string {
	return "user"
}

// 商城Banner
type BannerTable struct {
	Id           int
	Picture      string // 图片
	Name         string // 名称
	BusinessType int    // 业务类型：1-商品
	BusinessId   int    // 业务主键
	Status       int    // 是否显示：0-否 1-是
	Del          int
	Model
}

func (BannerTable) TableName() string {
	return "baner"
}

// 商城-分类
type CategoryTable struct {
	Id          int
	ParentId    int    // 父级分类
	Name        string // 分类名称
	Sort        int    // 排序
	Online      int    // 是否上线
	Picture     string // 图标
	Description string // 描述
	Del         int
	Model
}

func (CategoryTable) TableName() string {
	return "category"
}

// 小程序-宫格
type GridCategoryTable struct {
	Id         int
	Title      string // 标题
	Name       string // 名称
	CategoryId int    // 分类ID
	Picture    string // 图标
	Del        int
	Model
}

func (GridCategoryTable) TableName() string {
	return "grid_category"
}

// 商城-规格
type SpecificationTable struct {
	Id          int
	Name        string // 名称
	Description string // 描述
	Unit        string // 单位
	Standard    int    // 是否标准
	Del         int
	Model
}

func (SpecificationTable) TableName() string {
	return "specification"
}

// 商城-规格属性表
type SpecificationAttrTable struct {
	Id     int
	SpecId int    // 规格主键
	Value  string // 规格值
	Extend string // 扩展
	Del    int
	Model
}

func (SpecificationAttrTable) TableName() string {
	return "specification_attr"
}

// 商城-商品
type GoodsTable struct {
	Id            int
	BrandName     string // 品牌
	Title         string // 标题
	Price         string // 价格
	DiscountPrice string // 折扣
	CategoryId    int    // 分类ID
	Online        int    // 是否上线
	Picture       string // 主图
	BannerPicture string // 详情图
	DetailPicture string // 轮播图
	Tags          string // 标签
	Description   string // 详情
	SaleNum       int    // 销量
	Del           int
	Model
}

func (GoodsTable) TableName() string {
	return "goods"
}

// 商城-商品规格
type GoodsSpecTable struct {
	Id      int
	GoodsId int // 商品ID
	SpecId  int // 规格ID
	Del     int
	Model
}

func (GoodsSpecTable) TableName() string {
	return "goods_spec"
}

// 商城-SKU
type SkuTable struct {
	Id      int
	Title   string // 标题
	Price   string // 价格
	Code    string // 编码
	Stock   int    // 库存量
	GoodsId int    // 商品ID
	Online  int    // 是否上线
	Picture string // 图片
	Specs   string // 多规格属性
	Del     int
	Model
}

func (SkuTable) TableName() string {
	return "sku"
}

// 商城-SKU规格属性
type SkuSpecAttrTable struct {
	Id         int
	SkuId      int
	SpecId     int
	AttrId     int
	Del        int
	CreateTime string
	UpdateTime string
	Model
}

func (SkuSpecAttrTable) TableName() string {
	return "sku_spec_attr"
}

// 商城-优惠券
type CouponTable struct {
	Id          int
	Title       string // 标题
	FullMoney   string // 满减额
	Minus       string // 优惠金额
	Rate        string // 折扣
	Type        int    // 类型
	GrantNum    int    // 发券数量
	LimitNum    int    // 领取数量
	StartTime   string // 开始时间
	EndTime     string // 截止时间
	Description string // 规则描述
	Online      int    // 是否上线
	Del         int
	Model
}

func (CouponTable) TableName() string {
	return "coupon"
}

// 商城-优惠券领取记录
type CouponLogTable struct {
	Id         int
	CouponId   int    // 优惠券ID
	UserId     int    // 用户ID
	UseTime    string // 核销时间
	ExpireTime string // 过期时间
	Status     int    // 状态：0-未使用 1-已使用 2-已过期
	Code       string // 券码
	OrderNo    string // 核销的订单号
	Del        int    // 是否删除
	Model
}

func (CouponLogTable) TableName() string {
	return "coupon_log"
}

// 商城-购物车
type UserCartTable struct {
	Id      int
	UserId  int // 用户ID
	GoodsId int // 商品ID
	SkuId   int // sku ID
	Num     int // 数量
	Del     int
	Model
}

func (UserCartTable) TableName() string {
	return "user_cart"
}

// 商城-用户收货地址
type UserAddressTable struct {
	Id          int
	UserId      int    // 用户ID
	Contacts    string // 联系人
	Mobile      string // 手机号
	ProvinceId  string // 省份编码
	CityId      string // 城市编码
	AreaId      string // 地区编码
	ProvinceStr string // 省份
	CityStr     string // 城市
	AreaStr     string // 地区
	Address     string // 详细地址
	IsDefault   int    // 默认收货地址：0-否 1-是
	Del         int
	Model
}

func (UserAddressTable) TableName() string {
	return "user_address"
}

// 商城-订单表
type OrderTable struct {
	Id              int
	OrderNo         string // 订单号
	UserId          int    // 用户ID
	PayAmount       string // 付款金额
	GoodsAmount     string // 商品小计
	DiscountAmount  string // 优惠金额
	DispatchAmount  string // 运费
	PayTime         string // 支付时间
	DeliverTime     string // 发货时间
	FinishTime      string // 完成时间
	Status          int    // 状态 -1 已取消 0-待付款 1-待发货 2-待收货 3-已完成 4-（待发货）退款申请 5-已退款
	AddressId       int    // 地址ID
	AddressSnapshot string // 地址快照
	WxappPrepayId   string // 微信预支付ID
	TransactionId   string // 微信支付单号
	Remark          string // 订单备注
	Del             int
	Model
}

func (OrderTable) TableName() string {
	return "order"
}

type OrderGoodsTable struct {
	Id         int
	OrderNo    string // 订单号
	UserId     int    // 用户ID
	GoodsId    int    // 商品ID
	SkuId      int    // sku ID
	Picture    string // 图片
	Title      string // 标题
	Price      string // 价格
	Specs      string // sku属性
	Num        int    // 数量
	LockStatus int    // 锁定状态：0-锁定 1-解锁
	Model
}

func (OrderGoodsTable) TableName() string {
	return "order_goods"
}

type OrderRefundTable struct {
	Id           int
	RefundNo     string // 退款编号
	UserId       int    // 用户ID
	OrderNo      string // 订单编号
	Reason       string // 退款原因
	RefundAmount string // 退款金额
	Status       int    // 状态：0-退款申请 1-商家处理申请 2-退款完成
	Del          int    // 是否删除：0-否 1-是
	RefundTime   string // 退款时间
	Model
}

func (OrderRefundTable) TableName() string {
	return "order_refund"
}

type GoodsBrowseRecordTable struct {
	Id      int
	UserId  int    // 用户ID
	GoodsId int    // 商品ID
	Picture string // 商品图片
	Title   string // 商品名称
	Price   string // 商品价格
	Del     int    // 是否删除：0-否 1-是
	Model
}

func (GoodsBrowseRecordTable) TableName() string {
	return "goods_browse_record"
}

type CasbinRuleTable struct {
	Id       int    `json:"id"`
	Ptype    string `json:"ptype"`
	RoleName string `json:"role_name"`
	Path     string `json:"path"`
	Method   string `json:"method"`
}

func (CasbinRuleTable) TableName() string {
	return "casbin_rule"
}
